约束用于限制表中数据,确保数据的可靠性
常见约束
| 类型 | 功能 | 
| not null | 非空约束,保证数据不为null | 
| default | 默认约束,在不输入时保证字段有默认值 | 
| primary key | 主键,保证字段唯一性,且非空 | 
| unique | 唯一,保证字段唯一性,但可以为null(null只能有一个) | 
| foreign key | 外键,显示两表关系,保证字段值来自于主表关联列的值 | 
| check | 检查,用于对字段值添加限制(mysql中不支持:无效但不报错) | 
添加约束
创建表时添加
基本语法:
| 1 | create table TableName( | 
[]内类容为使用foreign key时需要添加的关联列
- 
列级约束,所有约束均可按照列级约束添加,但 foreign key外键约束无效。
- 
表级约束:除 not null、default外的约束,均可作为表级约束。示例: 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31create database students; 
 use students;
 create table major(
 id int primary key,
 majorName varchar(20)
 );
 #列级约束
 create table stuinfo(
 id int primary key,
 stuName varchar(20) not null,
 gender char(1) check(gender='男' or gender='女'),#mysql中无效
 seat int unique,
 age int default 18,
 majorId int references major(id) #此处列级外键无效
 );
 #表级约束
 create table stuinfo(
 id int ,
 stuName varchar(20) ,
 gender char(1) ,
 seat int ,
 age int ,
 majorId int,
 constraint pk primary key(id),
 constraint uq unique(seat),
 constraint ck check(gender='男' or gender='女'),
 constraint fk_stu_major foreign key(majorid) references major(id)
 );
在修改过程中添加、删除
- 添加约束语法
| 1 | #约束添加 | 
其中
constraint1代表对应约束语句,具体格式见上文
- 
删除约束语法 列级约束删除 1 
 2
 3
 4
 5#删除非空约束 
 alter table TableName modify column CloumnName type null;
 #删除默认约束
 alter table TableName modify column CloumnName type;表级约束删除 1 alter table TableName drop constraint_Type constraint_Name; 由于 primary只有一个,因此可省略constraint_Name
特别注意
- 
主键 - 
同一个表中, unique可以有多个,但primary key只能有一个
- 
可以将多个列组合成一个主键,其格式如 1 constraint pk primary key(column1,column2) 
 
- 
- 
外键 - 在从表中设置外键关系
- 从表列于主表关联列的类型要相同(或者兼容)
- 主表中的关联列必须是一个键(一般为primary key或者unique)
 
标识列
与约束类似,在创建表时添加:
| 1 | #设置自增长标识列 | 
在修改时添加、删除:
| 1 | #添加标识列 | 
标识列必须为一个
key(如primary,unique)一个表中仅能有一个自增长列
